package File.FileExercise;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * ClassName:File005
 * Package:File.FileExercise
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/27-21:31
 * @Version:v1.0
 */
public class File005 {
    /*需求
     * 统计一个文件夹中每个文件的个数并打印(考虑子文件夹)
     * 打印格式
     * txt：3个
     * doc：4个
     * jpg：6个
     *
     * 统计：1.计数器   2.Map集合
     * File   递归   Map集合(键  值-次数)*/
    public static void main(String[] args) {
        File file = new File("E:\\aaa");
        HashMap<String, Integer> hm = getCount(file);
        System.out.println(hm);
    }

    /*
     * 作用：统计文件夹中每种文件的个数
     * 参数：要统计的那个文件夹
     * 返回值：用Map集合统计
     *       键：后缀名
     *       值：次数
     *
     * a.txt
     * a.a.txt
     * aaa(不需要统计的)*/
    public static HashMap<String, Integer> getCount(File file) {
        //定义集合用来统计
        HashMap<String, Integer> hm = new HashMap<>();
        //进入文件夹
        File[] files = file.listFiles();
        //遍历数组
        for (File file1 : files) {
            //如果是文件,统计
            if (file1.isFile()) {
                String name = file1.getName();
                String[] arr = name.split("\\.");
                if (arr.length >= 2) {
                    String endName = arr[arr.length - 1];
                    if (hm.containsKey(endName)) {
                        //存在
                        int count = hm.get(endName);
                        count++;
                        hm.put(endName, count);
                    } else {
                        hm.put(endName, 1);
                    }
                }
            } else {
                //如果不是文件,递归
                //sonMap里面是子文件中每一种文件的个数
                HashMap<String, Integer> sonMap = getCount(file1);
                //遍历sonMap集合把里面的值累加到hm当中
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    int value = entry.getValue();
                    if (hm.containsKey(key)) {
                        //存在
                        int count = hm.get(key);
                        count = count + value;
                        hm.put(key, count);
                    } else {
                        //不存在
                        hm.put(key, value);
                    }
                }
            }
        }
        return hm;
    }
}
